package tree

import "fmt"

type Node struct {
	Value       int
	Left, Right *Node
}

// 定义结构体的方法, :值接收着
func (node Node) Print() {
	fmt.Println(node.Value)
}

// 可以看到上面的结构体方法和函数只是写法不同而已, 调用方法不同
func Print(node Node) {
	fmt.Println(node.Value)
}

func (node Node) SetValue(value int) {
	node.Value = value
}

// 指针接收者
func (node *Node) SetValueReal(value int) {
	if node == nil {
		fmt.Println("Setting Value to nil node, Ignore")
		return
	}
	node.Value = value
}

// 工厂函数(一般返回结构的地址)
func CreateTreeNode(value int) *Node {
	return &Node{Value: value}
}
